// 封装axios实例
import axios from 'axios'
// 创建axios实例
const request = axios.create({
    // !TODO:baseURL:最终需要修改为后端接口地址
    // baseURL: 'http://localhost:8080',
    // baseURL: 'http://192.168.200.249:8081',
    // baseURL: 'http://8.130.161.35:8081',
    // baseURL: 'http://10.13.20.192:8081',
    // baseURL:"http://192.168.43.28:8081",
    baseURL:"http://192.168.200.201:8081",
    timeout: 20000,
})
/**
 * 从localStorage中获取token,token存放的是对象信息，有token和tokenExpireTime两个字段
 */
// function getToKen() {
//     let tokenObj;
//     try {
//         tokenObj = localStorage.getItem('token');
//         tokenObj = tokenObj ? JSON.parse(tokenObj) : {};
//     } catch (e) {
//         console.log("get token from localStorage error");
//         console.log(e);
//     }
//     return tokenObj;
// }

/**
 * setToken方法，便于在登陆后将最新的token动态添加到header中，同时更新localStorage中的token
 */
// function setToken(obj: any) {
//     // 只添加token，不添加tokenExpireTime
//     request.defaults.headers['Authorization'] = obj.token;
//     window.localStorage.setItem('token', JSON.stringify(obj));
// }


// 临时配置调试token
request.interceptors.request.use(config => {
    // config.headers['Content-Type'] = 'application/json;charset=utf-8';
    // 在所有请求都加上请求头
    const token = localStorage.getItem('token')
    if (token) {
        config.headers['authorization'] = token
    }
    return config
})


/**
 * 向后端请求刷新token
 */
// function refreshToken() {
//     return request.post('/refreshToken').then(res => res.data);
// }
// 设置标志位，防止多次刷新token
// let isRefreshing = false;
// // 待请求队列
// let requests: any[] = [];
// request.interceptors.request.use(config => {
//     //发请求前做的一些处理，数据转化，配置请求头，设置token,设置loading等，根据需求去添加
//     const tokenObj = getToKen();
//     // 为每个请求添加token请求头
//     config.headers['Authorization'] = tokenObj.token;
//     // 登录接口和刷新token接口直接放行，！强调存在
//     if (config.url!.indexOf("/refreshToken") >= 0 || config.url!.indexOf("/login") >= 0) {
//         return config;
//     }
//     if (tokenObj.token && tokenObj.tokenExpireTime) {
//         const now = Date.now();
//         if (now >= tokenObj.tokenExpireTime) {
//             // 当前时间大于过期时间，说明token已经过期，
//             // 返回一个Promise，执行refreshToken后返回当前的config
//             if (!isRefreshing) {
//                 isRefreshing = true;
//                 // 多个请求存放在队列中等待刷新token后再执行
//                 refreshToken().then(res => {
//                     const { token, tokenExpireIn } = res.data;
//                     const tokenExpireTime = now + tokenExpireIn * 1000;
//                     // 将token和tokenExpireTime存放到localStorage中
//                     setToken({ token, tokenExpireTime });
//                     // 将最新的token添加到请求头中
//                     // config.headers['Authorization'] = token;
//                     isRefreshing = false;
//                     // return config;
//                     return token;
//                 }).then(token => {
//                     console.log("refresh token success");
//                     requests.forEach(cb => cb(token));
//                     // 执行完后清空队列
//                     requests.length = 0;
//                 })
//                     .catch(err => {
//                         console.error("refresh token error", err);
//                         // 返回reject Promise
//                         return Promise.reject(err);
//                     })
//             }
//         }
//         // 发现请求过期就存入requests数组中,等待refreshToken后再执行队列，保证请求顺序
//         const retryOriginalRequest = new Promise(resolve => {
//             requests.push((token: any) => {
//                 // 因为config中的token是旧的，所以需要更新一下
//                 config.headers['Authorization'] = token;
//                 resolve(config);
//             })
//         });
//         return retryOriginalRequest as any;
//     }
//     // console.log("config", config);
//     return config
// }, error => {
//     // router.push('/login');
//     Promise.reject(error)
// })

// request.interceptors.response.use(response => {
//     // 提取后端返回的数据
//     // let res = response.data;    
//     // 定义token超时的code
//     const { code } = response.data;
//     if (code === 1234) {
//         // token过期跳转到登录页面
//         Message.error('token过期，请重新登录');
//         window.location.href = '/login';
//     }
//     // 如果返回的是文件直接返回,二进制的文件，媒体文件,默认是undefined
//     if (response.config.responseType === 'blob') {
//         return response;
//     }
//     // 兼容服务器端返回的字符串数据
//     if (typeof response.data === 'string') {
//         response.data = response.data ? JSON.parse(response.data) : {};
//     }
//     // 验证不通过时给出提示
//     if (response.data.code === 401) {
//         Message.error(response.data.msg);
//     }
//     return response;
// }, error => {
//     console.log("catch", error);
//     return Promise.reject(error)
// })

export default request